// 定义模块的格式化字符串
#define pr_fmt(fmt) "%s:%s():%d: " fmt, KBUILD_MODNAME, __func__, __LINE__

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

// 定义模块加载函数
static int __init pr_fmt_init(void)
{
    pr_info("====printk模块加载成功！====\n");
    pr_debug("这是一个DEBUG级别的信息\n");
    pr_info("这是一个INFO级别的信息\n");
    pr_warn("这是一个WARNING级别的信息\n");
    pr_err("这是一个ERROR级别的信息\n");
    pr_crit("这是一个CRITICAL级别的信息\n");
    pr_alert("这是一个ALERT级别的信息\n");
    pr_emerg("这是一个EMERGENCY级别的信息\n");

    // 使用KERN_CONT继续上一条日志消息
    pr_info("这是一条需要继续的信息...");
    pr_cont("...这是继续的部分\n");

    return 0; // 返回0表示模块加载成功
}

// 定义模块卸载函数
static void __exit pr_fmt_exit(void)
{
    pr_info("====printk模块卸载成功！====\n");
}

// 注册模块加载和卸载函数
module_init(pr_fmt_init);
module_exit(pr_fmt_exit);

// 模块信息
MODULE_LICENSE("GPL");
MODULE_AUTHOR("your_name");
MODULE_DESCRIPTION("pr_fmt内核模块示例");
MODULE_VERSION("0.1");
